/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.si3.servicio;

import com.si3.jpa.ControlJPA;
import com.si3.modelo.Alumno;
import com.si3.modelo.EstadoSolicitud;
import com.si3.modelo.ObjetoAnio;
import com.si3.modelo.PaginaInfo;
import com.si3.modelo.Profesor;
import com.si3.modelo.Propuesta;
import com.si3.modelo.Proyecto;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;

/**
 *
 * 
 */
public class PropuestasService
{
    
	public boolean addNewPropuesta(Propuesta propuesta)
	{
	
	  boolean correcto=true;
	  try
	  {
	      System.out.println("[addNewPropuesta] PRopuesta que se va a insertar:");
	      ControlJPA.getInstancia().almacenaEntidad(propuesta);
	  }
	  catch (HibernateException he)
	  {
	      correcto=false;
	  }
	  finally
	  {
	      return correcto;
	  }
	}
    
	  public boolean deletePropuesta(int codigoPropuesta)
	  {
	    	
			
		  boolean correcto=true;
		  Propuesta propuesta=null;
		  try
		  {
		      System.out.println("[deletePropuesta] Propuesta que se va a insertar:");
		      propuesta=this.getPropuesta(codigoPropuesta);
		      ControlJPA.getInstancia().deleteEntidad(propuesta); 
		  }
		  catch (HibernateException he)
		  {
		      correcto=false;
		  }
		  finally
		  {
		      return correcto;
		  }
	    	
	  }
	  public List<ObjetoAnio> getAnios()
	  {
		  
	     List<Integer> anios = ControlJPA.getInstancia().getAnios(Propuesta.class);    
		
		 List<ObjetoAnio> objetosanio = new ArrayList<ObjetoAnio>(anios.size()); 
		 for (Integer i : anios) 
		 { 
			objetosanio.add(new ObjetoAnio(String.valueOf(i))); 
		 }
		
		 return objetosanio;		  
	  }

	
    public int getCount()
    {
    	int rowcount = ControlJPA.getInstancia().getCountEntidades(Propuesta.class, null, null);        	   	
    	return rowcount;
    }
    public int getCount(int anio)
    {
    	
	   	ArrayList campos= new ArrayList();
		ArrayList valores= new ArrayList();
		campos.add("anyo_academico");
		valores.add(new Integer(anio));  
    	int rowcount = ControlJPA.getInstancia().getCountEntidades(Propuesta.class,campos,valores);     	   	
    	return rowcount;
    }
    
    public int getCountProfesor(int anio,Profesor profesor)
    {
	   	ArrayList campos= new ArrayList();
		ArrayList valores= new ArrayList();
		campos.add("profesor.dni");
		valores.add(profesor.getDni());  
		campos.add("anyo_academico");
		valores.add(new Integer(anio)); 
    	int rowcount = ControlJPA.getInstancia().getCountEntidades(Propuesta.class, campos,valores); 	
    	   	
    	return rowcount;
    }

    public Propuesta getPropuesta(int codigoPropuesta)
    {
    	
    	Propuesta propuesta= (Propuesta)ControlJPA.getInstancia().getEntidad(codigoPropuesta, Propuesta.class);
    	return propuesta;
    }
    
    public List<Propuesta> getPropuestasProfesor(int anio,Profesor profesor,PaginaInfo paginainfo)
    {
	   	ArrayList campos= new ArrayList();
		ArrayList valores= new ArrayList();
		campos.add("profesor.dni");
		valores.add(profesor.getDni());
		campos.add("anyo_academico");
		valores.add(new Integer(anio)); 
    	List<Propuesta> lista = ControlJPA.getInstancia().getListaEntidadesPaginadas(Propuesta.class,campos,valores,paginainfo);
        return lista;
    }
    
    public List<Propuesta>  getPropuestas(int anio,PaginaInfo paginainfo)
    {
	   	ArrayList campos= new ArrayList();
		ArrayList valores= new ArrayList();
		campos.add("anyo_academico");
		valores.add(new Integer(anio)); 
     	List <Propuesta> lista = ControlJPA.getInstancia().getListaEntidadesPaginadas(Propuesta.class,campos,
     			                                                        valores,paginainfo);
      return lista;
    }
    
    public boolean updatePropuesta(Propuesta aPropuesta)
    {
      	boolean correcto=true;
        try
        {
          System.out.println("[updatePropuesta] Propuesta que se va a actualizar:");
          //al.printInfo();
          ControlJPA.getInstancia().almacenaEntidad(aPropuesta);
        }
        catch (HibernateException he)
        {
          correcto=false;
        }
        finally
        {
          return correcto;
        }
    }

}
